-- 运营活动: 充值充值


--[[
{
    cmd_id = 1, -- 命令id，用于批量停止、删除活动  
    act_id = 13, -- 活动id (13 重复充值)
    act_name = '重复充值', -- 活动名称
    act_desc = '充值对应金额可以获取相对奖励', -- 活动描述
    beg_time = 1493262000,  -- 活动开始时间(unix timestamp)
    end_time = 1593267400,  -- 活动结束时间(unix timestamp)
    config = { -- 配置数据
        Gold = 500,     --充值元宝
        LimitCount = 10,        --活动期间最多可以领取10次
        Rewards = 
        {
            {type = 0, id = 518, count = 2, bind = 1 ,},
            {type = 0, id = 763, count =20, bind = 1 ,},
            {type = 0, id = 518, count = 3, bind = 1 ,},
            {type = 0, id = 763, count =35, bind = 1 ,},
        },
    },
}
]]

-- 检查配置是否正确，正确则返回 0，否则返回错误码
function oper_act_13_check_cfg(cfg)
	if cfg == nil then return 20 end
	
	local config = cfg.config
	if config == nil then return 21 end
	
	if config.Rewards == nil then return 23 end
	if type(config.Rewards) ~= "table" then return 24 end
	if not oper_act_check_one_award_cfg(config.Rewards) then
		return 22
	end	
	return 0
end

-- 安装活动，成功则返回 0，否则返回错误码
function oper_act_13_setup(cfg)	
	return 0
end

-- 卸载活动
function oper_act_13_unsetup(cfg)	
end

-- 活动开始
function oper_act_13_start(cfg)
	local ssVar = System.getStaticVar()
	ssVar.oper_act_13_start = 1
	ssVar.oper_act_13_cmd = cfg.cmd_id
	ssVar.oper_act_13_act = cfg.act_id

	local data = gRankMgr_GetValueByIndx(0, RANK_DEFINE_OPERATION_13, 1)

    if data then
        local myData = BaseFuc_unserialize(data)
        if myData and myData.cmd_id and myData.cmd_id == cfg.cmd_id and myData.act_id and myData.act_id == cfg.act_id and
            myData.time and cfg.beg_time <= myData.time and  cfg.end_time > myData.time then
            return
        end
    end

	gRankMgr_Clear(RANK_DEFINE_OPERATION_13)
end

-- 活动结束
function oper_act_13_end(cfg)
	local ssVar = System.getStaticVar()
	ssVar.oper_act_13_start = nil
	ssVar.oper_act_13_cmd = nil
	ssVar.oper_act_13_act = nil
end

-- 打包数据
function oper_act_13_packet_data(sysarg, cfg)

	local ssVar = System.getStaticVar()
	if not ssVar.oper_act_13_start then
		return
	end
	if not cfg then
		return
	end

	local config = cfg.config
	if not config then
		return
	end

	
	local actorid = Actor.getActorId(sysarg)
	local data = gRankMgr_GetValueById(actorid, RANK_DEFINE_OPERATION_13, 1)
	local myData = BaseFuc_unserialize(data)

	if not myData or myData == "" or myData == 0 then
		myData = {}
	end

    local time = System.getSystemTime()
    if myData.mySelfTime and not System.isUnixTimeSameDay(myData.mySelfTime, time) then
        myData.count = config.LimitCount
    end 

	if not myData.count then
		myData.count = config.LimitCount
	end

	local pack = oper_act_alloc_init_data_packet(sysarg, cfg.cmd_id, cfg.act_id)
	if (pack == nil) then
		return
	end

	DataPack.writeByte(pack, myData.count or 0)
	DataPack.flush(pack)

	--DataPack.writeByte(netPack, 1)		-- 活动特有参数
end

--[[
-- 操作，返回操作结果，0为成功
function oper_act_13_do(sysarg, cfg, clientPkt)
	if cfg == nil then return end
	
	if cfg.state == nil or cfg.state ~= 1 then -- 不在活动中
		Actor.sendTipmsg(sysarg,Lang.ScriptTips.Operation001, ttFlyTip)
		return
	end
	
	local config = cfg.config
	if config == nil then -- 参数错误
		print("error, oper_act_2_do cfg.config confg error")
		return
	end
		
	
	local netPack = oper_act_alloc_do_result_packet(sysarg, cfg.cmd_id, cfg.act_id, 0)
--	DataPack.writeByte(netPack, 1) -- 活动特有参数
	DataPack.flush(netPack)
end
]]

--[[
-- 跨天
function oper_act_2_new_day_arrive(act_id)	
	
end

]]

--限时商品元宝
function oper_act_13_withdrawyuanbao(sysarg, Gold)
	local ssVar = System.getStaticVar()
	if not ssVar.oper_act_13_start then
		return
	end
	if not ssVar.oper_act_13_cmd then
		return
	end
	if not ssVar.oper_act_13_act then
		return
	end
	
	local cfg = get_oper_act_cfg(ssVar.oper_act_13_cmd, ssVar.oper_act_13_act)
	if not cfg then
		return
	end

	local config = cfg.config
	if not config then
		return
	end	

	local actorid = Actor.getActorId(sysarg)
	local data = gRankMgr_GetValueById(actorid, RANK_DEFINE_OPERATION_13, 1)
	local myData = BaseFuc_unserialize(data)

	if not myData or myData == "" or myData == 0 then
		myData = {}
	end

    local time = System.getSystemTime()
    if myData.mySelfTime and not System.isUnixTimeSameDay(myData.mySelfTime, time) then
        myData.count = config.LimitCount
    end 

	if not myData.count then
		myData.count = config.LimitCount
	end

	if myData.count <= 0 then
		return
	end

	if config.Gold <= Gold then
		myData.count = myData.count - 1

		if not myData.cmd_id then
            myData.cmd_id = cfg.cmd_id
            myData.act_id = cfg.act_id
            myData.time = time
        end

        myData.mySelfTime = time

        local newData = BaseFuc_serialize(myData)

		gRankMgr_SetRankEx(actorid, RANK_DEFINE_OPERATION_13, 1, newData)


		local rewards = config.Rewards

		local title = Lang.ScriptTips.Operation013
		local content = Lang.ScriptTips.Operation014

        local sex = Actor.getIntProperty(sysarg, PROP_ACTOR_SEX)
        local vocation = Actor.getIntProperty(sysarg, PROP_ACTOR_VOCATION)

		Awards.GiveToMailById(actorid, rewards, title, content, LogIds.OperationLogId013, Lang.LogTips.Operation013, vocation, sex)
		oper_act_13_packet_data(sysarg, cfg)
	end
	
end




